関数型パラダイムは、開発者の思考モデルを「状態を持つ箱の更新」から 数学的な変換を適用する 不変な値に移行します。Elixirではデータは決して変更されません。新しい形に生まれ変わるだけです。
1. 数学的主張
あなたが $x = a + 1$ と書くとき、結果を変数に割り当てるわけではありません。むしろ、ただ 主張している 式 $x$ と $a + 1$ が同じ値を持つということを示しています。これは、特定の文脈において $x$ が固定された値を表す代数的論理に似ています。
2. 不変性の保証
Elixirでは すべての値は不変ですデータは作成後、変更できません。関数がグローバル変数や渡されたオブジェクトを予期せぬ形で変更するような「副作用」を排除し、コードが予測可能でスレッドセーフであることを保証します。
3. 変換と変更の違い
私たちはデータを直接変更しません。Elixirには代入はありません。代わりに、 値をパターンに一致させるという試みを行います。値を「変更」するには、元のデータを関数に渡して完全に新しいバージョンを作成します。
iex> name = "elixir"
"elixir"
iex> cap_name = String.capitalize name
"Elixir"
iex> name
"elixir"(まだ完璧なまま!)
"elixir"
iex> cap_name = String.capitalize name
"Elixir"
iex> name
"elixir"(まだ完璧なまま!)
TERMINALbash — 80x24
> Ready. Click "Run" to execute.
>